/**
  **********************************************************************************************************************
  * @file    language.c
  * @brief   多语言支持模块实现文件
  * @details 实现多语言文本管理功能，提供中英文切换支持
  **********************************************************************************************************************
  */

#include "language.h"

/* 当前系统语言设置，默认为中文 */
static SystemLanguage_e sg_eSystemLanguage = SYSTEM_LANGUAGE_CHINESE;

/* 多语言文本查找表，索引为文本ID，内容为对应各语言的文本 */
const char *(sg_kSystemLanguage[TEXT_ALL])[SYSTEM_LANGUAGE_ALL] =
{
    [TEXT_MENU] = {"菜单", "Menu"},
    [TEXT_MAIN_MENU] = {"主菜单", "Main Menu"},
    [TEXT_FUNCTION_SELECT] = {"功能选择", "Func Select"},

    [TEXT_DISPLAY_SETTING] = {"显示设定", "Display Setting"},
    [TEXT_DIRECTION] = {"屏幕方向", "Direction"},
    [TEXT_NORMAL] = {"正向", "Normal"},
    [TEXT_RESERVE] = {"反向", "Reserve"},
    [TEXT_BRIGHTNESS] = {"屏幕亮度", "Brightness"},
    [TEXT_LANGUAGE] = {"语言", "Language"},
    [TEXT_CHINESE] = {"中文", "Chinese"},
    [TEXT_ENGLISH] = {"英文", "English"},

    [TEXT_BOOL_ON] = {"开", "ON"},
    [TEXT_BOOL_OFF] = {"关", "OFF"},

    [TEXT_RESET_DEFAULT] = {"恢复出厂", "Reset Default"},

    [TEXT_BACK] = {"返回", "Back"},

};

/**
  * @brief      设置系统语言
  * @details    更新全局语言设置变量，用于后续文本显示
  * 
  * @param[in]  lang 要设置的语言类型
  *             @arg SYSTEM_LANGUAGE_CHINESE 中文
  *             @arg SYSTEM_LANGUAGE_ENGLISH 英文
  * @note       如果参数超出有效范围，函数不会进行任何操作
  * @retval     None
  */
void set_language(SystemLanguage_e lang)
{
    if (lang < SYSTEM_LANGUAGE_ALL)
    {
        /* 参数合法，更新当前系统语言设置 */
        sg_eSystemLanguage = lang;
    }
    /* 参数超出范围，不执行任何操作 */
}

/**
  * @brief      获取当前语言下指定ID的文本
  * @details    根据当前系统语言设置和文本ID，从文本表中查找对应的字符串
  * 
  * @param[in]  id 文本ID，用于指定要获取的文本
  * @note       当前语言由全局变量 sg_eSystemLanguage 决定
  * @retval     const char* 返回对应的文本字符串
  * @retval     "N/A" 当ID无效时返回该值
  */
const char *get_text(TextId_e id)
{
    /* 定义静态字符串用于无效ID情况 */
    static const char *pszNullString = "N/A";

    if (id < TEXT_ALL)
    {
        /* ID有效，从查找表获取对应当前语言的文本 */
        return sg_kSystemLanguage[id][sg_eSystemLanguage];
    }

    return pszNullString; /* 未找到对应的文本 */
}

/**
  * @brief      获取指定语言下指定ID的文本
  * @details    根据指定的语言和文本ID，从文本表中查找对应的字符串
  * 
  * @param[in]  lang 指定的语言类型
  *             @arg SYSTEM_LANGUAGE_CHINESE 中文
  *             @arg SYSTEM_LANGUAGE_ENGLISH 英文
  * @param[in]  id 文本ID，用于指定要获取的文本
  * @note       此函数与 get_text 区别在于可以指定语言，而不受当前系统语言设置影响
  * @retval     const char* 返回对应的文本字符串
  * @retval     "N/A" 当ID或语言类型无效时返回该值
  */
const char *get_text_by_language(SystemLanguage_e lang, TextId_e id)
{
    /* 定义静态字符串用于无效ID情况 */
    static const char *pszNullString = "N/A";

    if (id < TEXT_ALL)
    {
        /* ID有效，从查找表获取指定语言的文本 */
        return sg_kSystemLanguage[id][lang];
    }

    return pszNullString; /* 未找到对应的文本 */
}
